package com.kling.http;

import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@Data
public class Text2VideoRequest {

    /**
     * 模型名称
     * 枚举值：kling-v1, kling-v1-6, kling-v2-master, kling-v2-1-master
     */
    private String modelName = "kling-v1";

    /**
     * 正向文本提示词
     * 不能超过2500个字
     */
    private String prompt;

    /**
     * 负向文本提示词
     * 不能超过2500个字符
     */
    private String negativePrompt = "";

    /**
     * 生成视频的自由度；值越大，模型自由度越小，与用户输入的提示词相关性越强
     * 取值范围：[0, 1]
     */
    private Float cfgScale = 0.5f;

    /**
     * 生成视频的模式
     * 枚举值：std，pro
     */
    private String mode = "std";

    /**
     * 控制摄像机运动的协议
     */
    private CameraControl cameraControl;

    /**
     * 生成视频的画面纵横比（宽:高）
     * 枚举值：16:9, 9:16, 1:1
     */
    private String aspectRatio = "16:9";

    /**
     * 生成视频时长，单位s
     * 枚举值：5，10
     */
    private String duration = "5";

    /**
     * 本次任务结果回调通知地址
     */
    private String callbackUrl;

    /**
     * 自定义任务ID
     */
    private String externalTaskId;

    @Data
    @NoArgsConstructor
    public static class CameraControl {
        /**
         * 预定义的运镜类型
         * 枚举值："simple", "down_back", "forward_up", "right_turn_forward", "left_turn_forward"
         */
        private String type;

        /**
         * 包含六个字段，用于指定摄像机在不同方向上的运动或变化
         */
        private Config config;

        @Data
        @NoArgsConstructor
        public static class Config {
            /**
             * 水平运镜，控制摄像机在水平方向上的移动量（沿x轴平移）
             * 取值范围：[-10, 10]
             */
            private Float horizontal;

            /**
             * 垂直运镜，控制摄像机在垂直方向上的移动量（沿y轴平移）
             * 取值范围：[-10, 10]
             */
            private Float vertical;

            /**
             * 水平摇镜，控制摄像机在水平面上的旋转量（绕y轴旋转）
             * 取值范围：[-10, 10]
             */
            private Float pan;

            /**
             * 垂直摇镜，控制摄像机在垂直面上的旋转量（沿x轴旋转）
             * 取值范围：[-10, 10]
             */
            private Float tilt;

            /**
             * 旋转运镜，控制摄像机的滚动量（绕z轴旋转）
             * 取值范围：[-10, 10]
             */
            private Float roll;

            /**
             * 变焦，控制摄像机的焦距变化，影响视野的远近
             * 取值范围：[-10, 10]
             */
            private Float zoom;
        }
    }

}